/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Extintor;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 *
 * @author glpc
 */
public class Extintor_DAO {

    public static Extintor getExtintor(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error obteniendo el Extintor!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);

            Extintor extintor = new Extintor();
            try {
                int i = 0;
                while (rs.next()) {
                    extintor.setNroBien(rs.getString(2));
                    extintor.setSede(rs.getString(3));
                    extintor.setNombreEdificio(rs.getString(4));
                    extintor.setPiso(rs.getString(5));
                    extintor.setTipo(rs.getString(6));
                    extintor.setCapacidad(rs.getString(7));
                    extintor.setFechaUltimaRecarga(rs.getString(8));
                    extintor.setStatus(rs.getString(9));
                    extintor.setPersonaContacto(rs.getString(10));
                    extintor.setSenalizado(rs.getString(11));
                    extintor.setUsado(rs.getString(12));
                    extintor.setReferencia(rs.getString(13));
                }
            } catch (Exception e) {
            }
            return extintor;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error obteniendo el extintor");
            return null;
        }
    }

    public static JSONArray consultarExtintor(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando un Extintor!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            System.out.println(query);
            JSONArray extintores = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject extintor = new JSONObject();
                    extintor.put("tam", rs.getString(1));
                    extintor.put("id_nro_bien", rs.getString(2));
                    extintor.put("sede", rs.getString(3));
                    extintor.put("nombre_edificio", rs.getString(4));
                    extintor.put("id_piso", rs.getString(5));
                    extintor.put("tipo", rs.getString(6));
                    extintor.put("capacidad", rs.getString(7));
                    String[] fechas = rs.getString(8).split("-");
                    extintor.put("fecha_ultima_recarga", fechas[2] + "/" + fechas[1] + "/" + fechas[0]);
                    extintor.put("status", rs.getString(9));
                    extintor.put("persona_contacto", rs.getString(10));
                    extintor.put("senalizado", rs.getString(11));
                    extintor.put("usado", rs.getString(12));
                    extintor.put("referencia", rs.getString(13));
                    extintor.put("coordenadas", rs.getString(14));
                    extintor.put("categoria", rs.getString(15));

                    extintores.put(i++, extintor);
                }
            } catch (Exception e) {
            }
            return extintores;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el extintor");
            return null;
        }
    }

    public static boolean actualizarExtintor(Extintor e) {

        String query = "UPDATE extintor set id_nro_bien = ?, nombre_sede = ?,"
                + " id_piso = ?, nombre_edificio= ?, tipo= ?, capacidad= ?,"
                + " fecha_ultima_recarga = ?, status= ?, persona_contacto= ?,"
                + " senalizado= ?, usado= ?, referencia= ?, coordenadas= ?,"
                + " categoria= ? "
                + " where id_nro_bien = " + e.getNroBien() + ";";

        

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date fechaUltRec = null;
        Date fechaUlt = null;

        try {
            fechaUltRec = sdf.parse(e.getFechaUltimaRecarga());
            fechaUlt = sdf.parse(e.getUltima_fecha());
        } catch (ParseException ex) {
            Logger.getLogger(Inspeccion_DAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            s = conexion.session.prepareStatement(query);
            System.out.println("--> QUERY e: "+e);

            s.setInt(1, Integer.parseInt(e.getNroBien()));
            s.setString(2, e.getSede());
            s.setInt(3, Integer.parseInt(e.getPiso()));
            s.setString(4, e.getNombreEdificio());
            s.setString(5, e.getTipo());
            s.setString(6, e.getCapacidad());
            s.setDate(7,new java.sql.Date(fechaUltRec.getYear(),fechaUltRec.getMonth(), fechaUltRec.getDay()));
            s.setString(8, e.getStatus());
            s.setString(9, e.getPersonaContacto());
            s.setString(10, e.getSenalizado());
            s.setString(11, e.getUsado());
            s.setString(12, e.getReferencia());
            s.setString(13, e.getCoordenadas());
            s.setString(14, e.getCategoria());
            int retorno = s.executeUpdate();

            System.out.println("--> Retorno: "+retorno);
            return true;

        } catch (SQLException sqle) {
            System.out.println("Error Actualizando Extintor");
            	    	System.out.println("SQLState: "
			+ sqle.getSQLState());
	    	System.out.println("SQLErrorCode: "
			+ sqle.getErrorCode());
	    	sqle.printStackTrace();

            return false;
        }
    }

    public static boolean insertarExtintor(Extintor e) {

        String query = "INSERT INTO extintor("
                + "id_nro_bien, nombre_sede, id_piso, nombre_edificio, tipo, capacidad, fecha_ultima_recarga,"
                + "status, persona_contacto, senalizado, usado, referencia, coordenadas, categoria,"
                + "ultima_sede, ultima_edificio, ultima_piso, ultima_coordenadas, ultima_fecha)"
                + "values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date fechaUltRec = null;
        Date fechaUlt = null;

        try {
            fechaUltRec = sdf.parse(e.getFechaUltimaRecarga());
            fechaUlt = sdf.parse(e.getUltima_fecha());
        } catch (ParseException ex) {
            Logger.getLogger(Inspeccion_DAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            s = conexion.session.prepareStatement(query);

            s.setInt(1, Integer.parseInt(e.getNroBien()));
            s.setString(2, e.getSede());
            s.setInt(3, Integer.parseInt(e.getPiso()));
            s.setString(4, e.getNombreEdificio());
            s.setString(5, e.getTipo());
            s.setString(6, e.getCapacidad());
            s.setDate(7,new java.sql.Date(fechaUltRec.getYear(),fechaUltRec.getMonth(), fechaUltRec.getDay()));
            s.setString(8, e.getStatus());
            s.setString(9, e.getPersonaContacto());
            s.setString(10, e.getSenalizado());
            s.setString(11, e.getUsado());
            s.setString(12, e.getReferencia());
            s.setString(13, e.getCoordenadas());
            s.setString(14, e.getCategoria());
            s.setString(15, e.getUltima_sede());
            s.setString(16, e.getUltima_edificio());
            s.setInt(17, Integer.parseInt(e.getUltima_piso()));
            s.setString(18, e.getUltima_coordenadas());
            s.setDate(19,new java.sql.Date(fechaUlt.getYear(),fechaUlt.getMonth(), fechaUlt.getDay()));
            int retorno = s.executeUpdate();
            return true;

        } catch (SQLException sqle) {
            System.out.println("Error Insertando Extintor");
            	    	System.out.println("SQLState: "
			+ sqle.getSQLState());
	    	System.out.println("SQLErrorCode: "
			+ sqle.getErrorCode());
	    	sqle.printStackTrace();

            return false;
        }    
    }

    //Modulo2
    public JSONObject consultarExtintores(String edificio, String piso) {
        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement s = null;
        try {
            s = conexion.session.createStatement();
            String query = "select id_nro_bien, nombre_sede, nombre_edificio, id_piso, tipo, capacidad, fecha_ultima_recarga, status, referencia, categoria, coordenadas from extintor where nombre_edificio = '" + edificio + "' and id_piso='" + piso + "'";
            ResultSet rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);

            JSONObject extintores = new JSONObject();
            int i = 0;
            while (rs.next()) {
                JSONObject extintor = new JSONObject();
                extintor.put("id_nro_bien", rs.getString(1));
                extintor.put("sede", rs.getString(2));
                extintor.put("nombre_edificio", rs.getString(3));
                extintor.put("id_piso", rs.getString(4));
                extintor.put("tipo", rs.getString(5));
                extintor.put("capacidad", rs.getString(6));
                String[] fechas = rs.getString(7).split("-");
                extintor.put("fecha_ultima_recarga", fechas[2] + "/" + fechas[1] + "/" + fechas[0]);
                extintor.put("status", rs.getString(8));
                extintor.put("referencia", rs.getString(9));
                extintor.put("categoria", rs.getString(10));
                extintor.put("coordenadas", rs.getString(11));

                extintores.put(++i + "", extintor);
            }

            rs.close();

            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return extintores;
        } catch (SQLException se) {
            System.out.println("Error Consultando Extintor!\n" + se.getMessage());
            return null;
        } catch (Exception ex) {
            System.out.println("Error Consultando Pisos!\n");
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public JSONArray listaCategorias() {
        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement s = null;
        try {
            s = conexion.session.createStatement();
            String query = "select distinct categoria from extintor";
            ResultSet rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);

            JSONArray categorias = new JSONArray();
            int i = 0;
            while (rs.next()) {
                categorias.put(i++, rs.getString(1));
            }
            rs.close();
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return categorias;
        } catch (SQLException se) {
            System.out.println("Error Consultando Extintor!\n" + se.getMessage());
            return null;
        } catch (Exception ex) {
            System.out.println("Error Consultando Pisos!\n");
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public JSONArray listaTipos(String categoria) {
        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement s = null;
        try {
            s = conexion.session.createStatement();
            String query = "select distinct tipo from extintor where categoria='"+categoria+"'";
            ResultSet rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);

            JSONArray tipos = new JSONArray();
            int i = 0;
            while (rs.next()) {
                tipos.put(i++, rs.getString(1));
            }
            rs.close();
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return tipos;
        } catch (SQLException se) {
            System.out.println("Error Consultando Extintor!\n" + se.getMessage());
            return null;
        } catch (Exception ex) {
            System.out.println("Error Consultando Pisos!\n");
            return null;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }
}
